问题
由于并发程序很容易出现线程安全的问题,并且线程的管理也是件很复杂的事情,所以当创建一个线程时,不要通过Thread的方式手动创建,可以使用Executor框架进行管理。Executor的优点是什么?
答案
- 等待任务执行完成的方式多样:当前线程可以等待提交到executor中的线程集合全部执行完成(invokeAll()或invokeAny()),也可以优雅的等待结束(awaitTermination()),也可以在任务完成时逐个获取这些任务的结果(利用ExecutorCompletionService)等等;
- 创建多种类型的线程池:可以创建单个线程、固定的多个线程以及线程个数可变的线程池,也可以通过ThreadPoolExecutor类创建适合应用场景的线程池;
- 线程和执行间的解耦:使用executor最大的好处在于将线程执行机制和任务解耦开,之前的Thread类既充当了工作单元又是执行机制,更好管理和使用起来更加安全可靠。
结论
在涉及到多线程程序时,不要使用Thread的方式创建线程,应该使用executor来管理和创建线程,它最大的好处在于工作单元(线程)和任务之间的解耦。